package com.flydog.taskManager.entity;

import com.flydog.taskManager.common.converter.ProcessStatusConverter;
import com.flydog.taskManager.dto.ProcessStatus;
import lombok.*;
import org.hibernate.Hibernate;

import javax.persistence.*;
import java.util.Calendar;
import java.util.Date;

/**
 * @author Cao
 * @description 工作实体，是所有实体的父类
 * @create 2021-05-10
 */
@MappedSuperclass
@Getter
@Setter
@ToString
@RequiredArgsConstructor
public class Task {

    /**
     * 工作实体ID
     */
    @Id
    @Column(name = "id", nullable = false, unique = true, insertable = false, updatable = false)
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;

    /**
     * 工作名称
     */
    @Column(name = "name", nullable = false)
    private String name;

    /**
     * 工作结束时间
     */
    @Column(name = "end_time", nullable = false)
    private Calendar end;

    /**
     * 工作目标
     */
    @Column(name = "target", nullable = false)
    private String target;

    /**
     * 工作实体标签
     */
    @Column(name = "tags")
    private String tags;

    /**
     * 工作内容描述
     */
    @Column(name = "description")
    private String description;

    /**
     * 工作进程状态
     * “0” 阶段性工作为“未完成”，周期性工作为上一周期“未完成”
     * “1” 阶段性工作为“已完成”，周期性工作为上一周期“已完成”
     * “2” 阶段性工作为“进行中”
     */
    @Convert(converter = ProcessStatusConverter.class)
    @Enumerated
    @Column(name = "processStatus")
    private ProcessStatus processStatus;

    /**
     * 工作分类
     * “0” 阶段性工作
     * “1” 周期性工作
     */
    @Column(name = "classify", nullable = false)
    private Integer classify;

    /**
     * 工作重要性
     * “0”重要
     * “1”很重要
     */
    @Column(name = "importance", nullable = false)
    private Integer importance;

    /**
     * 用户ID
     */
    @Column(name = "userId", nullable = false)
    private Long userId;



    @Override
    public boolean equals(Object o) {
        if (this == o) return true;
        if (o == null || Hibernate.getClass(this) != Hibernate.getClass(o)) return false;
        Task task = (Task) o;

        return id != null && id.equals(task.id);
    }

    @Override
    public int hashCode() {
        return 1976597858;
    }
}
